"""
Фильтр для программ на питоне.
Сдвигает комметарий на 72 позицию. Не трогает строки начинающиеся с комметария.
Убирает в конце строки пробелы.
Вход: utf-8. Выход: c1251.
"""
import sys
import os
import logging                                                                  # запись логов

def pos_comm(line):
    """
    Находим в строке позицию начала комментарий символа '#'
    """
    apostrophe = ""                                                                    # переменная для хранения открытого апастрофа
    comment = "" # переменная для хранения первого символа комментария
    for i, sim in enumerate(line):                                              # итератор - позиция, символ
        if sim in ("'",'"'):                                                    # если встретился любой апостроф
            if not apostrophe:                                                         # и буфер апастрофа пуст
                apostrophe = sim                                                       # значит апостроф отрывающийся. запомнить в буфере. началась символная строка
            elif apostrophe == sim:                                                    # иначе проверяем, если он совпадает с буфером
                apostrophe = ""                                                        # значит апостроф закрывающий. очистить буфер. кончилась символная строка
        if sim == '/' and apostrophe == "":                                            # если это символ комменарий и не внутри строки
            if comment != '/': # если буфер комментария чист,
                comment = '/' # значит это возможно первый символ комментария. запоминаем в буфере
            else: 
                comment = '' # иначе, это второй символ комметария
                return i-1                                                            # возвращаем позицию первого символа комменарий
        else: # иначе 
            comment = '' # очищаем буфер комметария без всяких проверок
        

if __name__ == '__main__':

    logging.basicConfig(filename='log.txt',level=logging.DEBUG)                 # log file

    if len(sys.argv) < 2:                                                       # обязательный агрумент имя файла
        logging.error('Консольная команда: comm name.py')
        quit()

    in_file = sys.argv[1]                                                       # имя входного файла
    if os.path.splitext(in_file)[1] == '':                                      # если расширение отсутствует
        in_file += '.py'                                                        # добавляем расширение питона

    if not os.path.exists(in_file):                                             # если входной файл не найден
        logging.error('Файл: {} не найден'.format(in_file))
        quit()

    out_file = in_file + '_'                                                    # выходной файл имеет расширение .py_

    f_out = open(out_file,'w')                                 # файл вывода
    # f_out = open(out_file,'w',encoding='utf-8')                                 # файл вывода
    with open(in_file,'r') as f_in:                            # файл входной (сам закроется)
    # with open(in_file,'r',encoding='utf-8') as f_in:                            # файл входной (сам закроется)
        for line in f_in:                                                       # читаем строку
            line = line.rstrip()                                                # удаляем пробелы в конце строки
            i = pos_comm(line)                                                  # ищем позицию комментария
            if i and line[:i].strip():                                          # есть и комментарий не одинок
              line = ("{0:80}{1}{2}"                                            # коментарий за 80 позицией
                     .format(line[:i].rstrip(),line[i:i],line[i:]))             #
            f_out.write(line + '\n')                                            # вывод в формате UTF-8
    f_out.close()                                                               # закрываем выходной файл
